﻿using System;
using System.Text;
using System.Collections.Generic;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Ovvio.Business;

namespace Ovvio.Web.Tests.Business
{
    /// <summary>
    /// Summary description for UserServiceTest
    /// </summary>
    [TestClass]
    public class UserServiceTest
    {
        private readonly UserService _service;
        public UserServiceTest()
        {
            _service = new UserService();
        }

        private TestContext testContextInstance;

        /// <summary>
        ///Gets or sets the test context which provides
        ///information about and functionality for the current test run.
        ///</summary>
        public TestContext TestContext
        {
            get
            {
                return testContextInstance;
            }
            set
            {
                testContextInstance = value;
            }
        }

        #region Additional test attributes
        //
        // You can use the following additional attributes as you write your tests:
        //
        // Use ClassInitialize to run code before running the first test in the class
        // [ClassInitialize()]
        // public static void MyClassInitialize(TestContext testContext) { }
        //
        // Use ClassCleanup to run code after all tests in a class have run
        // [ClassCleanup()]
        // public static void MyClassCleanup() { }
        //
        // Use TestInitialize to run code before running each test 
        // [TestInitialize()]
        // public void MyTestInitialize() { }
        //
        // Use TestCleanup to run code after each test has run
        // [TestCleanup()]
        // public void MyTestCleanup() { }
        //
        #endregion

        [TestMethod]
        public void UserCreationTest()
        {
            var entity = _service.GetEntity( p => p.Username.ToUpper() == "ADMINISTRATOR");

            if (entity != null )
                _service.Delete(entity, entity.Id);

            var newEntity = _service.Create();
            newEntity.Username = "ADMINISTRATOR";
            newEntity.FirstName = "John";
            newEntity.LastName = "Smith";
            newEntity.Mobile = "01234567";
            newEntity.IsActive = true;
            newEntity.UpdatedBy = "ADMINISTRATOR";
            newEntity.RegistrationDate = DateTime.Now;
            newEntity.IsNewsLetterSubscriber = true;
            newEntity.Role = 2;
            newEntity.SetPassword("OVVIOADMIN");
            _service.Save(newEntity, -1);

            var savedEntity = _service.GetEntity(p => p.Username.ToUpper() == "ADMINISTRATOR");

            Assert.IsNotNull(savedEntity);
            Assert.AreEqual("OVVIOADMIN", savedEntity.DecryptPassword());
        }
    }
}
